package ModelLayer;
import java.util.ArrayList;

/**
 * Write a description of class vareContainer here.
 * 
 * @author (Gruppe 1) 
 * @version (17.12.2012)
 */
public class VareContainer
{
    // instance variables - replace the example below with your own
    private ArrayList<Vare> vareListe;
    private static VareContainer instance;
    private static int lastUsedVareNr;

    /**
     * Constructor for objects of class vareContainer
     */
    private VareContainer(){
        vareListe = new ArrayList<Vare>();
        vareBase();
        lastUsedVareNr = 100;
    }
    /**
     * Singleton
     */
    public static VareContainer getInstance()
    {
        if(instance == null)
        {
            instance = new VareContainer();
        }
        return instance;
    }
    /**
     * Lav en vare og tilføj den til lageret.
     * 
     * @param String navn - navnet på en vare
     * @param String beskrivelse - beskrivelsen for en vare
     * @param int lager - Hvor mange der er på lager
     * @param double pris - prisen for varen
     * @param int minLager - Minimums stk på lager
     * @param int maxLager - Maksimum stk på lager
     */
    public void createVare(String navn, String beskrivelse, int lager, double pris, int minLager, int maxLager)

    {   
        vareListe.add(new Vare(lastUsedVareNr, navn, beskrivelse, lager, pris, minLager, maxLager));
        lastUsedVareNr++;
    }
     /**
     * Tilføj en vare til vareliste
     * 
     * @return - returnere en vareliste og tilfoejer varen.
     */
    public boolean tilfoejVare(Vare vare)
    {
        return vareListe.add(vare);
    }
    /**
     * Fjerner en vare fra varelisten
     * 
     * @return - returnere en vareliste og sletter varen.
     */
    public boolean fjernVare(Vare vare)
    {
        return vareListe.remove(vare);
    }

    /**
     * Find en specifik vare, udfra varenavn
     * 
     * @param String vareNavn - find varenavnet
     */
    public Vare findVare(String vareNavn)
    {
        if(indholderVareNr(vareNavn)){
            for(Vare vare : vareListe){
                if(vare.getVareNr() == Integer.parseInt(vareNavn)){
                    return vare;
                }
            }
        }        
        for(Vare vare : vareListe){
            if(vare.getNavn().equals(vareNavn)){
                return vare;
            }
        }
        return null;
    }
    /**
     * Find navnet på en vare og tilføj den til lageret
     * 
     * @param String vareNavn - find og tilføj en vare
     */
    public ArrayList<Vare> findVarer(String vareNavn){
		ArrayList<Vare> v = new ArrayList<Vare>();
		if(indholderVareNr(vareNavn)){
			for(Vare vare : vareListe){
				if(vare.getVareNr() == Integer.parseInt(vareNavn)){
					v.add(vare);
				}
			}	
		}
		for(Vare vare : vareListe){
			if(vare.getNavn().contains(vareNavn)){
				v.add(vare);
			}
		}
		return v;
    }
    /**
     * Find en vare ud fra et specifik varenummer
     * 
     * @param boolean indeholderVareNr - Find en vare og returner, hvis ikke returnere den false
     */
    public boolean indholderVareNr(String nrs) {
		if (nrs == null || nrs.length() == 0)
			return false;
		for (int i = 0; i < nrs.length(); i++) {
			if (!Character.isDigit(nrs.charAt(i)))
				return false;
		}
		return true;
	}
    /**
     * En midlertidig varebase som eksempel
     * 
     * @void - Se Varebasen.
     */
    private void vareBase(){
		vareListe.add(new Vare(101, "Sav", "saver i træ", 5, 29.95, 2, 5));
		vareListe.add(new Vare(102, "Hammer", "banker søm", 5, 15.95, 2, 5));
		vareListe.add(new Vare(103, "Søm", "til hammeren", 5, 23.95, 2, 5));
		vareListe.add(new Vare(104, "Skruetrækker", "skrue skruer", 5, 27.95, 2, 5));
		vareListe.add(new Vare(105, "skruer", "til skruetrækkeren", 5, 50.95, 2, 5));
		vareListe.add(new Vare(106, "gipsplade", "Til at bygge en væg", 5, 45.95, 2, 5));
	}
}
